package com.zenithmind.mall.service;

import com.zenithmind.common.result.PageResult;
import com.zenithmind.mall.pojo.dto.OrderDTO;
import com.zenithmind.mall.pojo.query.OrderQuery;
import com.zenithmind.mall.pojo.vo.OrderVO;

/**
 * 订单服务接口
 * 
 * @author ZenithMind Team
 * @since 2025-06-09
 */
public interface OrderService {

    /**
     * 创建订单
     * 
     * @param orderDTO 订单信息
     * @param userId 用户ID
     * @return 订单ID
     */
    String createOrder(OrderDTO orderDTO, String userId);

    /**
     * 支付订单
     * 
     * @param orderId 订单ID
     * @param userId 用户ID
     * @return 支付结果
     */
    Boolean payOrder(String orderId, String userId);

    /**
     * 取消订单
     * 
     * @param orderId 订单ID
     * @param reason 取消原因
     * @param userId 用户ID
     * @return 操作结果
     */
    Boolean cancelOrder(String orderId, String reason, String userId);

    /**
     * 发货
     * 
     * @param orderId 订单ID
     * @param shippingCompany 物流公司
     * @param shippingNo 物流单号
     * @return 操作结果
     */
    Boolean shipOrder(String orderId, String shippingCompany, String shippingNo);

    /**
     * 确认收货
     * 
     * @param orderId 订单ID
     * @param userId 用户ID
     * @return 操作结果
     */
    Boolean confirmReceive(String orderId, String userId);

    /**
     * 完成订单
     * 
     * @param orderId 订单ID
     * @return 操作结果
     */
    Boolean finishOrder(String orderId);

    /**
     * 分页查询订单列表
     * 
     * @param query 查询条件
     * @return 订单列表
     */
    PageResult<OrderVO> getOrderPage(OrderQuery query);

    /**
     * 根据ID查询订单详情
     * 
     * @param id 订单ID
     * @param userId 用户ID（用于权限验证）
     * @return 订单详情
     */
    OrderVO getOrderById(String id, String userId);

    /**
     * 根据订单号查询订单详情
     * 
     * @param orderNo 订单号
     * @param userId 用户ID（用于权限验证）
     * @return 订单详情
     */
    OrderVO getOrderByNo(String orderNo, String userId);

    /**
     * 查询用户订单统计
     * 
     * @param userId 用户ID
     * @return 订单统计
     */
    Object getOrderStatistics(String userId);

    /**
     * 处理超时订单
     * 
     * @return 处理数量
     */
    Integer handleTimeoutOrders();

    /**
     * 自动确认收货
     * 
     * @return 处理数量
     */
    Integer autoConfirmOrders();

    /**
     * 自动好评
     * 
     * @return 处理数量
     */
    Integer autoReviewOrders();
}
